package com.atguigu.crowd.mvc.handler;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.atguigu.crowd.entity.Role;
import com.atguigu.crowd.service.api.RoleService;
import com.atguigu.crowd.util.ResultEntity;
import com.github.pagehelper.PageInfo;

/**
 * 角色管理全程使用异步/Ajax来进行前端和后端开发，主要是跟管理员管理（同步）做个区分
 * @author L
 *
 */
@Controller
public class RoleHandler {
	
	@Autowired
	private RoleService roleService;
	/**
	 * 角色管理分页查询
	 * @param pageNum
	 * @param pageSize
	 * @param keyword
	 * @return
	 */
	@ResponseBody
	@RequestMapping("/role/get/page/info.json")
	public ResultEntity<PageInfo<Role>> getPageInfo(
			@RequestParam(value="pageNum",defaultValue="1") Integer pageNum,
			@RequestParam(value="pageSize",defaultValue="6") Integer pageSize,
			@RequestParam(value="keyword",defaultValue="") String keyword
			){
		
		PageInfo<Role> pageInfoRole;
		
		//方式1：try-catch
/*		try {
  			//调用Service方法获取分页数据
			pageInfoRole = roleService.getPageInfo(pageNum, pageSize, keyword);
			
			//封装到ResultEntity对象中返回
			return ResultEntity.successWithData(pageInfoRole);
			
		} catch (Exception e) {
			
			return ResultEntity.failed(e.toString());//失败了也返回给前端，前端收到的就是数据是错误消息
		}*/
	
		//方式2：使用框架自带的异常处理机制，我们自己不捕获
		//这里其实不try - catch 也行，因为搭建环境的时候我们已经考虑到了，如果出错了会跳到报错页面去，所以我们还是用原来的写法，这种写法出错了直接系统就体现出来了，不会发给前端了，其实这样还好一些，错误更直观，减少定位问题的时间
	
		//调用Service方法获取分页数据
		 pageInfoRole = roleService.getPageInfo(pageNum, pageSize, keyword);
		
		//封装到ResultEntity对象中返回(如果上面的操作抛出异常，交给异常映射机制去处理)
		return ResultEntity.successWithData(pageInfoRole);
	}
	/**
	 * 角色管理-保存/新增 的接口/方法
	 * @param role
	 * @return
	 */
	@ResponseBody
	@RequestMapping("/role/do/save.ht")
	public ResultEntity<Role> save(Role role){
		
		//生成创建时间(因为前端传过来的有问题，暂时我没有找到解决办法)
		Date date=new Date();//默认存入数据库后就是当前日期
		role.setCreatetime(date);

		//只要前端传过来的参数跟实体属性一样，就可以直接这样保存（少了获取参数的代码也不用我们自己new Role对象了)
		
		roleService.saveRole(role);
		
		return ResultEntity.successWithoutData();
	}
	/**
	 * 根据id数组删除数据
	 * @param roleIds id 数组
	 * @return
	 */
	@ResponseBody
	@RequestMapping("/role/remove/by/role/id/array.ht")
	public ResultEntity<String> removeByRoleIdArray(@RequestBody List<Integer> roleIds){
		
		Integer result= roleService.removeRole(roleIds);
		
		if (result>0) {
			//说明更新成功了
			return ResultEntity.successWithoutData();
		}else {
			//result<=0   说明一条数据都没有更新成功，应该要返回给前端  失败了，老铁
			return ResultEntity.failed("没有任何数据更新");
		}
		
	}
}










